Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

948
Visualizações
WSL 2: Ejecutar aplicaciones gráficas de escritorio de Linux desde Windows 10 Bash Shell "Error E233: no se puede abrir la pantalla"

¿Cómo ejecutar aplicaciones gráficas de escritorio de Linux desde Bash Shell de Windows 10?

Primero, instalé Windows Subsystem for Linux (WSL) siguiendo los pasos que se muestran aquí :

(1) Instalado Windows 10 Pro Insider Preview Build 19619.

(2) Distribución Ubuntu Linux instalada.

(3) Cambió la versión de distribución de WSL 1 a WSL 2.

En segundo lugar, para habilitar las aplicaciones gráficas de escritorio de Linux desde Bash Shell de Windows 10, seguí los siguientes pasos como se muestra aquí :

(4) Instalé un servidor X que es Xming

(5) Se instaló el editor vim gráfico basado en GTK como prueba usando:

sudo apt-get install vim-gtk

(6) Establecer mi variable de entorno de visualización

export DISPLAY=:0

(7) Iniciar una aplicación

gvim

Sin embargo, esto no abrió la aplicación y recibí el siguiente error:

 E233: cannot open display Press ENTER or type command to continue E852: The child process failed to start the GUI Press ENTER or type command to continue

¿Alguna idea de por qué se produce este error?

over 4 years ago · Santiago Trujillo
9 Respostas
Responde à pergunta

0

El subsistema de red en WSL2 es diferente al que se usa en WSL1. Debe tener en cuenta las diferencias para acceder a las aplicaciones de red que se ejecutan en Windows y en Linux:

  • En WSL1, Linux usa las mismas direcciones IP que el host de Windows, luego, puede acceder a las aplicaciones usando localhost o 127.0.0.1
  • En WSL2, Linux se ejecuta en una máquina virtual liviana y tiene una dirección IP diferente. Para acceder a las aplicaciones de red que se ejecutan en Windows Host, debe usar la dirección IP de Windows.

Comprobación de la dirección IP del host de Windows

Hay muchas formas de determinar las direcciones IP en el host de Windows. Puede ejecutar los siguientes comandos en su WSL Linux:

  • cat /etc/resolv.conf muestra la dirección IP de la interfaz eth0 en Windows
  • ipconfig.exe muestra toda la configuración de IP en el host de Windows
  • route.exe print muestra la configuración de enrutamiento de la red en el host de Windows

Configuración de la variable DISPLAY para WSL2

Según la documentación de Microsoft, puede configurar la variable DISPLAY comprobando el servidor de nameserver en el archivo /etc/resolv.conf . ( @fqquiner y @VPraharsha ya mencionaron esto)

 export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0

Sin embargo, tuve problemas al usar esta solución, probablemente porque uso mi computadora portátil con una conexión WiFi y varias redes virtuales. En lugar de la solución anterior, determino la dirección IP de Windows usando route.exe y comprobando la interfaz utilizada en la puerta de enlace predeterminada.

 export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0

Configuración de la variable DISPLAY en el .profile

Puede establecer la variable DISPLAY en su archivo ~/.profile . Use el siguiente código:

 # set DISPLAY to use X terminal in WSL # in WSL2 the localhost and network interfaces are not the same than windows if grep -q WSL2 /proc/version; then # execute route.exe in the windows to determine its IP address DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0 else # In WSL1 the DISPLAY can be the localhost address if grep -q icrosoft /proc/version; then DISPLAY=127.0.0.1:0.0 fi fi
over 4 years ago · Santiago Trujillo Relatório

0

ingrese la descripción de la imagen aquí Las siguientes instrucciones fueron copiadas y pegadas de un artículo que escribí, pero perdió el formato original, los enlaces y las capturas de pantalla:

Fuente: Cómo instalar Ubuntu Desktop con una interfaz gráfica de usuario en WSL2


Descargar VcXsrv: Visite el sitio web oficial Haga clic en "Descargar"


Instale VcXsrv: Abra "vcxsrv-64.1.20.8.1.installer.exe" Haga clic en "Siguiente" Haga clic en "Instalar" Haga clic en "Cerrar"


Permitir acceso a VcXsrv: Marque "Redes privadas" Haga clic en "Permitir acceso"


Abra PowerShell: Presione "⊞ Windows" Ingrese "PowerShell" en la barra de búsqueda Haga clic derecho en "Windows PowerShell" Haga clic en "Ejecutar como administrador"


Abra WSL2: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

wsl


Instale Ubuntu Desktop: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt --yes install ubuntu-desktop


Establezca la variable de nombre de usuario: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

username=$(wslvar USERNAME)


Cree el directorio de Ubuntu: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

mkdir --parents /mnt/c/users/$username/.ubuntu/


Abra el directorio de Ubuntu: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

cd /mnt/c/users/$username/.ubuntu


Descargue el repositorio de software de Linux para productos de Microsoft: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

Ubuntu 20.04: wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb --output-document packages-microsoft-prod.deb Ubuntu 18.04: wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb --output-document packages-microsoft-prod.deb


Instale el repositorio de software de Linux para productos de Microsoft: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo dpkg --install packages-microsoft-prod.deb


Actualice los repositorios: copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt update


Instale APT Transport para HTTPS: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt install --yes apt-transport-https


Actualice los repositorios: copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt update


Instale .Net: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt install --yes dotnet-sdk-5.0


Agregue Arkane Systems al directorio de la lista de origen: Copie el comando que se encuentra debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo sh -c 'echo "deb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /" > /etc/apt/sources.list.d/wsl-translinux.list'


Actualice los repositorios: copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt update


Instale Genie: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

sudo apt install --yes systemd-genie


Cree el archivo Sudoers: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

echo "$USER ALL=(ALL) NOPASSWD:/usr/bin/genie" | sudo EDITOR="tee" visudo --file /etc/sudoers.d/$USER


Cree el script de escritorio: Copie el código que se encuentra debajo de estas instrucciones Pegue el código en PowerShell Presione "Enter"

 # CREATE BASH SCRIPT # Store block of text with here document create_bash_script=$(cat << end_of_string # Define necessary environment variables export DISPLAY="\$(cat /etc/resolv.conf | grep nameserver | awk '{ print \$2 }'):1.0" export DESKTOP_SESSION="ubuntu" export GDMSESSION="ubuntu" export XDG_SESSION_DESKTOP="ubuntu" export XDG_CURRENT_DESKTOP="ubuntu:GNOME" export XDG_SESSION_TYPE="x11" export XDG_BACKEND="x11" export XDG_SESSION_CLASS="user" export XDG_DATA_DIRS="/usr/local/share/:/usr/share/:/var/lib/snapd/desktop" export XDG_CONFIG_DIRS="/etc/xdg" export XDG_RUNTIME_DIR="\$HOME/xdg" export XDG_CONFIG_HOME="\$HOME/.config" export XDG_DATA_HOME="\$HOME/.local/share" export XDG_CACHE_HOME="\$HOME/.cache" export XDG_DESKTOP_DIR="\$HOME/Desktop" export XDG_DOCUMENTS_DIR="\$HOME/Documents" export XDG_DOWNLOAD_DIR="\$HOME/Downloads" export XDG_MUSIC_DIR="\$HOME/Music" export XDG_PICTURES_DIR="\$HOME/Pictures" export XDG_PUBLICSHARE_DIR="\$HOME/Public" export XDG_TEMPLATES_DIR="\$HOME/Templates" export XDG_VIDEOS_DIR="\$HOME/Videos" # Start desktop environment gnome-session end_of_string ) # Store username environment variable in lowercase username=$(wslvar USERNAME | awk '{ print tolower($0) }') && # Save block of text in bash file echo "${create_bash_script}" > "/mnt/c/users/$username/.ubuntu/02_start_desktop.sh"

Descargue las imágenes de acceso directo: copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

wget https://assets.ubuntu.com/v1/9fbc8a44-circle-of-friends-web.zip


Descomprima las imágenes de acceso directo: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

unzip -o 9fbc8a44-circle-of-friends-web.zip


Cree el icono de acceso directo: copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

convert -resize 64x64 ./circle-of-friends-web/png/cof_orange_hex.png ubuntu.ico


Salga de WSL2: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

exit


Cree el script VcXsrv: Copie el código que se encuentra debajo de estas instrucciones Pegue el código en PowerShell Presione "Enter"

 # RELOAD VCXSRV SCRIPT # Store username environment variable in lowercase $username = $env:username.tolower() # Store block of text with here-string $reload_vcxsrv_script = @" # Stop vcxsrv proccess that contains "1.0" in the program window title get-process vcxsrv | where { `$_.mainwindowtitle -like "*1.0*" } | stop-process # Start vcxsrv process in a large program window on display number one start-process "c:\program files\vcxsrv\vcxsrv.exe" -argument ":1 -ac -nowgl -multimonitors -dpms" "@ # Save block of text in powershell file echo "${reload_vcxsrv_script}" > $env:userprofile/.ubuntu/reload_vcxsrv.ps1

Cree el script de Ubuntu: Copie el código que se encuentra debajo de estas instrucciones Pegue el código en PowerShell Presione "Enter"

 # CREATE VISUAL BASIC SCRIPT # Store username environment variable in lowercase $username = $env:username.tolower() # Store block of text with here-string $create_vbs_script = @" ' Run PowerShell script in background set application = createobject("shell.application") application.shellexecute "powershell", "-file c:\users\admin\.ubuntu\01_reload_vcxsrv.ps1", "", "", 0 ' Allow PowerShell script to complete wscript.sleep 3000 ' Run Bash script in background set shell= createobject("wscript.shell") shell.run "wsl sudo genie -c bash /mnt/c/users/admin/.ubuntu/02_start_desktop.sh", 0 "@ # Save block of text in bash file echo "${create_vbs_script}" > $env:userprofile/.ubuntu/03_start_ubuntu.vbs

Cree la secuencia de comandos de acceso directo: copie el código de debajo de estas instrucciones Pegue el código en PowerShell Presione "Enter"

 # Store block of text with here-string $create_shortcut_script = @" # Define location variables `$shortcut_location = "`$env:userprofile\.ubuntu\Ubuntu.lnk" `$program_location = "`$env:userprofile\.ubuntu\03_start_ubuntu.vbs" # Create shortcut `$object = new-object -comobject wscript.shell `$shortcut = `$object.createshortcut(`$shortcut_location) `$shortcut.targetpath = `$program_location `$shortcut.iconlocation = "`$env:userprofile\.ubuntu\ubuntu.ico" `$shortcut.save() "@ # Save block of text in powershell file echo $create_shortcut_script > $env:userprofile/.ubuntu/04_create_shortcut.ps1

Abra el directorio de Ubuntu: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

cd c:\users\admin\.ubuntu


Cree el acceso directo: copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

powershell.exe -file .\04_create_shortcut.ps1


Abra el Directorio en Explorer: Copie el comando de debajo de estas instrucciones Pegue el comando en PowerShell Presione "Enter"

explorer .


Inicie el escritorio de Ubuntu: haga doble clic en el acceso directo "Ubuntu"


Abra Terminal: haga clic en "Actividades" en la esquina superior izquierda Ingrese "Terminal" en la barra de búsqueda Haga clic en "Terminal"


Deshabilite el bloqueo de pantalla: Copie el comando de debajo de estas instrucciones Pegue el comando en la Terminal Presione "Enter"

gsettings set org.gnome.desktop.screensaver lock-enabled false


Instale Snap Store: Copie el comando de debajo de estas instrucciones Pegue el comando en la Terminal Presione "Enter"

sudo snap install snap-store


over 4 years ago · Santiago Trujillo Relatório

0

Esto funcionó para WSL1, para WSL2 establezca la dirección IP adecuada

  1. instalar servidor xming
  2. en WSL ejecute export DISPLAY=localhost:0.0

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Relatório

0

Personalmente, uso un enfoque diferente de las otras respuestas aquí, uno que está más en línea con la arquitectura (tal como la entiendo) de la próxima función WSLg (en versión preliminar/beta).

Estoy tan acostumbrado a conectarme a mis diversos sistemas usando Escritorio remoto (también conocido como RDP) que tenía sentido usar xrdp en mi(s) instancia(s) de WSL para aplicaciones gráficas. Esto también me brinda un entorno de escritorio completo, con la capacidad de probar diferentes administradores de escritorio (aunque todavía no he explorado tanto).

Los pasos de instalación en Ubuntu 20.04 son muy sencillos:

 sudo apt install xrdp xfce4 # Or whatever desktop manager you want sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini # So it doesn't interfere with Windows RDP on 3389

En /etc/xrdp/startwm.sh , comente las últimas dos líneas (que mencionan Xsession) y agregue:

 #test -x /etc/X11/Xsession && exec /etc/X11/Xsession #exec /bin/sh /etc/X11/Xsession exec startxfce4

Inicie xrdp con:

 sudo service xrdp start

Y eso es todo: debería poder conectarse a su escritorio WSL utilizando la aplicación de conexión de escritorio remoto integrada. La computadora a la que conectarse será localhost:3390 . Asegúrese de que Xorg esté seleccionado como tipo de sesión.

over 4 years ago · Santiago Trujillo Relatório

0

En caso de que alguien no lo supiera, hay una manera más fácil. En2021 , Microsoft nos dio WSLg . 🎉

Básicamente, solo necesita Windows 11 , pero se recomiendan los controladores para vGPU ( Intel AMD Nvidia ) .

WSLg no es compatible con WSL1 . Las nuevas instancias de WSL2 básicamente funcionarán ™ .
Los sistemas WSL2 más antiguos deberán actualizarse una vez:

  1. En PowerShell administrativo: wsl --update
  2. wsl --shutdown para forzar un reinicio de WSL

¡No olvide eliminar cualquier otra modificación a $DISPLAY que haya realizado!

Captura de pantalla de WSLg ejecutándose en Windows 11

over 4 years ago · Santiago Trujillo Relatório

0

Aquí hay una sección de solución de problemas para depurar X11 en wsl2:

https://github.com/cascadium/wsl-windows-toolbar-launcher/blob/master/README.md#troubleshooting

El reenvío de puertos no es lo mismo que WSL1: es posible que se pueda acceder a sus servicios de Linux a través de localhost para Windows, pero lo contrario ya no es cierto.

Por lo tanto, debe usar la IP interna de su host de Windows y ajustar el firewall para permitir el paso de la red WSL.

over 4 years ago · Santiago Trujillo Relatório

0

Agregando a la respuesta de fquinner,

Su variable DISPLAY env debe configurarse como export DISPLAY=XXXX:0 para usar la dirección IP del host de Windows como WSL2 y el host de Windows no está en el mismo dispositivo de red, donde XXXX es la dirección IP

y su dirección IP aparece en resolv.conf contra el servidor de nombres ( $ cat /etc/resolv.conf )

o simplemente export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0" para cargar la dirección IP correcta automáticamente. Además, puede agregar esto a .bashrc o .zshrc (si usa Zsh)

over 4 years ago · Santiago Trujillo Relatório

0

Descubrí que ahora para que la GUI funcione (al menos cuando está en línea) necesita usar su IP pública ...

por ejemplo, ejecutar lo siguiente debería funcionar:

 export DISPLAY=$(dig +short myip.opendns.com @resolver1.opendns.com):0
over 4 years ago · Santiago Trujillo Relatório

0

Tuve el mismo problema, así que probé estas otras sugerencias, pero lo que terminó funcionando fue permitir que vcxsrv atraviese el firewall público. Sé que no está usando vcxsrv, pero quizás también sea el mismo problema para usted.

Instale VcXsrv y luego habilite el firewall público como estas imágenes. Abra el Firewall de Windows Defender con seguridad avanzada usando wf.msc en el símbolo del sistema. Luego permita conexiones como en estas imágenes.

Haga doble clic y luego permita cada uno de los perfiles públicos para VcXsrv

[ Permitir la conexión en las propiedades del firewall VcXsrv2

Luego ejecute VcXsrv de esta guía para Windows 10 WSL2

Ejecute VcXsrv agregando el parámetro de adición -ac o escriba esto en el símbolo del sistema "C:\Program Files\VcXsrv\vcxsrv.exe" :0 -multiwindow -clipboard -wgl -ac

Luego escriba esto en su terminal WSL2

 export DISPLAY_NUMBER="0.0" export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):$DISPLAY_NUMBER export LIBGL_ALWAYS_INDIRECT=1 # OPTIONAL Set the keyboard layout to US setxkbmap -layout us setsid emacs exit
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda